import router from "@/router"
import store from "@/store"

// 添加导航守卫
router.beforeEach(async (to, from, next) => {
    // 先判断有没有token
    const token = store.getters.token
    if (token) {
        // 如果有token就判断是不是想去登录页
        if (to.path === '/login') {
            // 如果想去登录页，因为已经登录有了token 所以直接跳到首页
            next('/')
        } else {
            // 如果有登录的token 并且不去登录页
            // 判断有没有用户信息 如果没有就接口获取用户信息 在进入所有后台页面前 先准备好用户资料
            if (!store.state.user.userInfo.userId) {
                await store.dispatch('user/getUserInfo')

                const menus = store.state.user.userInfo.roles.menus
                const res = await store.dispatch('permission/filterList', menus)
                router.addRoutes([
                    ...res,
                    { path: '*', redirect: '/404', hidden: true }
                ])
                // 如果是刷新之类第一次进页面, 追加完路由
                // 需要按照原来的目的地地址, 再跳转一次
                // 以再次出发路由匹配
                next(to.path)
            } else {
                next()
                return
            }
            // 不去登录页就继续操作
            next()
        }
    } else {
        // 设置白名单
        const whiteList = ['/login', '/404', '/test']
        // 如果没有登录没有token 分两种情况，考虑白名单
        if (whiteList.indexOf(to.path) !== -1) {
            // 如果想去的网页在白名单内 就不需要登录token 直接继续即可
            next()
        } else {
            // 想去的网页不在白名单内 就需要先去登录
            next('/login')
        }

    }
})
